package com.rr.controller;

import org.springframework.security.access.prepost.PostAuthorize;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.security.PermitAll;

/**
 * @author RR
 * @date 2023/3/14 12:26
 */
@RestController
public class TestController {
    /*
    * 访问controller需要先登录，用户名user，密码在控制台可找到，每次启动服务随机生成
    * 《配置覆盖》
    * 可以在配置文件覆盖username和password
    * */
    @GetMapping("/hello")
    public String hello(){
        return "hello spring security";
    }

    @GetMapping("/user/adminApi")
    public String adminApi(){
        return "需要有admin权限的人才能访问";
    }

    @GetMapping("/user/roleApi")
    public String roleApi(){
        return "需要有role角色的人才能访问，权限配置处需要加上ROLE_前缀，但在配置的hasRole方法里面可带可不带，没有带会自动加上前缀";
    }

    @PreAuthorize("hasAnyAuthority('admin')")
    @GetMapping("/user/annotation/adminApi")
    public String annotationAdminApi(){
        return "注解形式，需要有admin权限的人才能访问";
    }

    @PreAuthorize("hasAnyRole('role')")
    @GetMapping("/user/annotation/roleApi")
    public String annotationRoleApi(){
        return "注解形式，需要有role角色的人才能访问，权限配置处需要加上ROLE_前缀，但在配置的hasRole方法里面可带可不带，没有带会自动加上前缀";
    }

    @PostAuthorize("hasAuthority('admin')")
    @GetMapping("/user/annotation/postAuthorize/roleApi")
    public String annotationPostAuthorizeRoleApi(){
        System.out.println("@PostAuthorize就算没有权限，也会执行完该方法，再返回403");
        return "注解形式，@PostAuthorize就算没有权限，也会执行完该方法，再返回403";
    }
}
